package br.uniceub.fsw.agenda.model.facade;

import br.uniceub.fsw.agenda.exception.BusinessException;
import br.uniceub.fsw.agenda.exception.DatabaseException;
import br.uniceub.fsw.agenda.model.dao.TipoTelefoneDAO;
import br.uniceub.fsw.agenda.model.vo.TipoTelefoneVO;
import br.uniceub.fsw.agenda.model.dao.MenuDAO;
import br.uniceub.fsw.agenda.model.vo.MenuVO;
import br.uniceub.fsw.agenda.util.StringUtils;
import java.util.List;

/**
 *
 * @author Bruno
 */
public class ManterTipoTelefoneFacade extends GenericFacade {

    /**
     * Busca todos os Menus
     * @return List com objetos Menu
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     * @throws br.uniceub.fsw.agenda.exception.BusinessException
     */
    public List<MenuVO> findAllMenu() throws DatabaseException, BusinessException {
        try {
            MenuDAO dao = new MenuDAO(getConnection());
            return dao.findAll();
        } finally {
            closeConnection();
        }
    }

    /**
     * Busca todos os Tipos de Telefone
     * @return List com objetos TipoTelefone
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     * @throws br.uniceub.fsw.agenda.exception.BusinessException
     */
    public List<TipoTelefoneVO> findAllTipoTelefone() throws DatabaseException, BusinessException {
        try {
            TipoTelefoneDAO dao = new TipoTelefoneDAO(getConnection());
            return dao.findAll();
        } finally {
            closeConnection();
        }
    }
    
    /**
     * Busca todos os Tipos de Telefone ou somente os que possuírem a descrição passada
     * @param dsTipoTelefone descrição do tipo do telefone
     * @return List com objetos TipoTelefone
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     * @throws br.uniceub.fsw.agenda.exception.BusinessException
     */
    public List<TipoTelefoneVO> findAllTipoTelefone(String dsTipoTelefone) throws DatabaseException, BusinessException {
        try {
            TipoTelefoneDAO dao = new TipoTelefoneDAO(getConnection());
            
            if(StringUtils.isNullOrEmpty(dsTipoTelefone)) {
                dao.findAll();
            } else {
                dao.findAllByNome(dsTipoTelefone);
            }
            
            return dao.findAll();
        } finally {
            closeConnection();
        }
    }
    
    /**
     * Busca a TipoTelefone pela id
     * @param idTipoTelefone id do TipoTelefone
     * @return objeto TipoTelefone
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     * @throws br.uniceub.fsw.agenda.exception.BusinessException
     */
    public TipoTelefoneVO findTipoTelefoneById(Integer idTipoTelefone) throws DatabaseException, BusinessException {
        try {
            TipoTelefoneDAO dao = new TipoTelefoneDAO(getConnection());
            return dao.findById(idTipoTelefone);
        } finally {
            closeConnection();
        }
    }
    
    /**
     * Busca todas as TipoTelefones por parte do nome
     * @param dsTipoTelefone nome do tipoTelefone
     * @return List com objetos TipoTelefone
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     * @throws br.uniceub.fsw.agenda.exception.BusinessException
     */
    public List<TipoTelefoneVO> findAllTipoTelefoneByNome(String dsTipoTelefone) throws DatabaseException, BusinessException {
        try {
            TipoTelefoneDAO dao = new TipoTelefoneDAO(getConnection());
            return dao.findAllByNome(dsTipoTelefone);
        } finally {
            closeConnection();
        }
    }
    
    /**
     * Insere um novo tipoTelefone.
     * @param tipoTelefone
     * @return ID auto-increment gerada pra esse registro
     * @throws br.uniceub.fsw.agenda.exception.BusinessException 
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     */
    public Integer inserirTipoTelefone(TipoTelefoneVO tipoTelefone) throws BusinessException, DatabaseException {
        try {
            TipoTelefoneDAO dao = new TipoTelefoneDAO(getConnection());

            String dsTipoTelefone = tipoTelefone.getDsTipoTelefone();
            
            //tratamento de erros
            if(StringUtils.isNullOrEmpty(dsTipoTelefone))
            {
                throw new BusinessException("Nome do TipoTelefone é obrigatório.");
            }
        
            return dao.insert(tipoTelefone);            
        } finally {
            closeConnection();
        }        
    }
    
    /**
     * Atualiza um tipoTelefone.
     * @param tipoTelefone
     * @throws br.uniceub.fsw.agenda.exception.BusinessException 
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     */
    public void alterarTipoTelefone(TipoTelefoneVO tipoTelefone) throws BusinessException, DatabaseException {
        try {
            TipoTelefoneDAO dao = new TipoTelefoneDAO(getConnection());

            String dsTipoTelefone = tipoTelefone.getDsTipoTelefone();
            
            //tratamento de erros
            if(StringUtils.isNullOrEmpty(dsTipoTelefone))
            {
                throw new BusinessException("Nome do TipoTelefone é obrigatório.");
            }
        
            dao.update(tipoTelefone);            
        } finally {
            closeConnection();
        }        
    }
    
    /**
     * Exclui um tipoTelefone.
     * @param tipoTelefone
     * @throws br.uniceub.fsw.agenda.exception.BusinessException 
     * @throws br.uniceub.fsw.agenda.exception.DatabaseException
     */
    public void excluirTipoTelefone(TipoTelefoneVO tipoTelefone) throws BusinessException, DatabaseException {
        try {
            TipoTelefoneDAO dao = new TipoTelefoneDAO(getConnection());
            dao.delete(tipoTelefone);
        } finally {
            closeConnection();
        }        
    }

}
